import pandas as pd
from openpyxl import Workbook


def split_excel_by_class():
    # 读取 Excel 文件，不指定表头，保留第一行
    file_path = '1.xlsx'
    df = pd.read_excel(file_path, header=None)

    # 提取第一行大标题
    big_title = df.iloc[0].tolist()

    # 创建新的工作簿
    wb = Workbook()
    # 删除默认创建的工作表
    default_sheet = wb.active
    wb.remove(default_sheet)

    # 创建总名单工作表
    total_sheet = wb.create_sheet(title='总名单')
    # 逐行写入总名单数据
    for row in df.values.tolist():
        total_sheet.append(row)

    # 将第二行数据作为表头
    new_header = df.iloc[1]
    # 从第三行开始加载数据
    df = df[2:]
    # 设置新的表头
    df.columns = new_header
    # 重置索引
    df = df.reset_index(drop=True)

    # 打印所有列名
    print("数据的所有列名：", df.columns)

    # 检查是否存在 '班级' 列
    if '班级' not in df.columns:
        print("数据中不存在 '班级' 列，请检查文件。")
        return

    # 生成班级列表，22 级 1 班到 24 级 9 班
    classes = []
    for grade in range(22, 25):
        for class_num in range(1, 20):
            classes.append(f'{grade}级{class_num}班')
    print(classes, 'classes')

    for class_name in classes:
        print(class_name, 'sssss')

        # 筛选当前班级的数据
        class_df = df[df['班级'] == class_name]
        if not class_df.empty:
            # 创建以班级命名的工作表
            ws = wb.create_sheet(title=class_name)
            # 写入第一行大标题
            ws.append(big_title)
            # 写入表头
            ws.append(class_df.columns.tolist())
            # 逐行写入数据
            for row in class_df.values.tolist():
                ws.append(row)

    # 保存新的 Excel 文件
    output_file = '3.xlsx'
    wb.save(output_file)


if __name__ == "__main__":
    split_excel_by_class()
